from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIntValidator, QDoubleValidator, QRegExpValidator
import sys
from PyQt5.QtCore import QRegExp


class QlineEditValidator(QWidget):
    def __init__(self):
        super(QlineEditValidator, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("校验器")
        # 创建表单布局
        formLayout = QFormLayout()
        # 创建文本输入框
        intLineEdit = QLineEdit()
        doubleLineEdit = QLineEdit()
        validatorLineEdit = QLineEdit()
        # 将控件添加到表单布局
        formLayout.addRow('整数类型', intLineEdit)
        formLayout.addRow('浮点数类型', doubleLineEdit)
        formLayout.addRow('数字和字母', validatorLineEdit)
        # 设置提示文本
        intLineEdit.setPlaceholderText('整形')
        doubleLineEdit.setPlaceholderText('浮点数类型')
        validatorLineEdit.setPlaceholderText('数字和字母')
        # 通过校验器使整数类型范围在1-99之间
        # 创建整数校验器
        intValidator = QIntValidator(self)
        # 设置范围[1-99]
        intValidator.setRange(1, 99)
        # 创建浮点校验器[-360,360]，
        doubleValidator = QDoubleValidator(self)
        doubleValidator.setRange(-360, 360)
        # 精度：小数点后2位
        doubleValidator.setNotation(QDoubleValidator.StandardNotation)
        doubleValidator.setDecimals(2)

        # 创建数字和字母校验器
        # 创建正则表达式
        reg = QRegExp('[a-zA-Z0-9]+$')
        # 创建正则表达式的校验器
        validator = QRegExpValidator(self)
        # 绑定正则表达式和校验器
        validator.setRegExp(reg)
        # 设置校验器
        intLineEdit.setValidator(intValidator)
        doubleLineEdit.setValidator(doubleValidator)
        validatorLineEdit.setValidator(validator)
        # 设置布局
        self.setLayout(formLayout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QlineEditValidator()
    main.show()
    sys.exit(app.exec_())
